package com.shujia.scala

object Demo17Fun {
  def main(args: Array[String]): Unit = {
    /**
     * 2、以函数作为返回值
     *
     */

    def fun(): Int => String = {

      //定义一个参数为Int返回值为String类型的函数
      def f(i: Int): String = {
        (i + 100).toString
      }

      //返回一个函数
      f
    }

    //intToString是对函数f的引用
    val intToString: Int => String = fun()

    //调用返回的函数
    val str: String = intToString(10)
    println(str)


    /**
     * 参数也是函数返回值也是函数
     *
     */

    def fun2(f: Int => String): Int => String = {
      //返回一个函数
      f
    }

    val intToString1: Int => String = fun2((i: Int) => i.toString)
    val str1: String = intToString1(100)
    println(str1)

    val fun1: (Int => String) => Int => String = fun2
  }

}
